一般流程
原始数据:表格、图片、视频、文本、语音、……
特征工程:
模型学习:最核心的部分,学习一个用来预测的映射
所有样本都有类别标记
| 原始数据 | 样本/示例 | 属性/特征 | 标记 |
|---|---|---|---|
| $o_1$ | $(\xv_1, y_1)$ | $\xv_1[1:d]$ | $y_1$ |
| $o_2$ | $(\xv_2, y_2)$ | $\xv_2[1:d]$ | $y_2$ |
| $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ |
| $o_m$ | $(\xv_m, y_m)$ | $\xv_m[1:d]$ | $y_m$ |
任务类型:
线性回归:用最小二乘求解超定方程组 (方程个数比未知数多)
只有部分样本有类别标记,如何利用其它未标记样本?
| 原始数据 | 样本/示例 | 属性/特征 | 标记 |
|---|---|---|---|
| $o_1$ | $(\xv_1, y_1)$ | $\xv_1[1:d]$ | $y_1$ |
| $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ |
| $o_l$ | $(\xv_l, y_l)$ | $\xv_m[1:d]$ | $y_l$ |
| $o_{l+1}$ | $(\xv_{l+1}, -)$ | $\xv_{l+1}[1:d]$ | $-$ |
| $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ |
| $o_{l+u}$ | $(\xv_{l+u}, -)$ | $\xv_{l+u}[1:d]$ | $-$ |
任务类型:
所有样本都没有类别标记
| 原始数据 | 样本/示例 | 属性/特征 | 标记 |
|---|---|---|---|
| $o_1$ | $(\xv_1, -)$ | $\xv_1[1:d]$ | $-$ |
| $o_2$ | $(\xv_2, -)$ | $\xv_2[1:d]$ | $-$ |
| $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ |
| $o_m$ | $(\xv_m, -)$ | $\xv_m[1:d]$ | $-$ |
任务类型:
米哈尔斯基 等《机器学习:一种人工智能途径》
Machine Learning: An Artificial Intelligence Approach
费根鲍姆 等《人工智能手册》
The Handbook of Artificial Intelligence
多明戈斯 Pedro Domingos
《终极算法》The Master Algorithm
灵魂问题:哪个算法更好?
| 约会次序 | 约会时间 | 约会方式 | 当天温度 | 当天电视 | 答应约会 |
|---|---|---|---|---|---|
| 1 | 周末 | 吃饭 | 暖和 | 不好看 | 否 |
| 2 | 周末 | 逛街 | 暖和 | 好看 | 是 |
| 3 | 周末 | 逛街 | 暖和 | 不好看 | 是 |
| 4 | 周末 | 逛街 | 炎热 | 好看 | 否 |
| 5 | 周末 | 逛街 | 炎热 | 不好看 | ? |
| 约会次序 | 约会时间 | 约会方式 | 当天温度 | 当天电视 | 答应约会 |
|---|---|---|---|---|---|
| 1 | 周末 | 吃饭 | 暖和 | 不好看 | 否 |
| 2 | 周末 | 逛街 | 暖和 | 好看 | 是 |
| 3 | 周末 | 逛街 | 暖和 | 不好看 | 是 |
| 4 | 周末 | 逛街 | 炎热 | 好看 | 否 |
| 5 | 周末 | 逛街 | 炎热 | 不好看 | ? |
用“若……且……且……则……”形式的合取规则覆盖数据
$(\text{方式} = \text{逛街}) \wedge (\text{温度} = \text{暖和}) \rightarrow \text{约会}$
| 约会次序 | 约会时间 | 约会方式 | 当天温度 | 当天电视 | 答应约会 |
|---|---|---|---|---|---|
| 1 | 周末 | 吃饭 | 暖和 | 不好看 | 否 |
| 2 | 周末 | 逛街 | 暖和 | 好看 | 是 |
| 3 | 周末 | 逛街 | 暖和 | 不好看 | 是 |
| 4 | 周末 | 逛街 | 炎热 | 好看 | 否 |
| 5 | 周末 | 逛街 | 炎热 | 不好看 | ? |
用带阈值的线性函数拟合数据
$\sgn(w_0 + w_1 \times \text{次序} + \cdots + w_5 \times \text{电视}) \rightarrow \{\text{是}, \text{否}\}$
| 约会次序 | 约会时间 | 约会方式 | 当天温度 | 当天电视 | 答应约会 |
|---|---|---|---|---|---|
| 1 | 周末 | 吃饭 | 暖和 | 不好看 | 否 |
| 2 | 周末 | 逛街 | 暖和 | 好看 | 是 |
| 3 | 周末 | 逛街 | 暖和 | 不好看 | 是 |
| 4 | 周末 | 逛街 | 炎热 | 好看 | 否 |
| 5 | 周末 | 逛街 | 炎热 | 不好看 | ? |
利用贝叶斯公式求后验概率
$\Pr (\text{约会}|\text{次序},\ldots,\text{电视}) = \frac{\Pr (\text{次序},\ldots,\text{电视}|\text{约会}) \Pr (\text{约会}) \qquad \quad}{\Pr (\text{次序},\ldots,\text{电视}) \qquad}$
| 约会次序 | 约会时间 | 约会方式 | 当天温度 | 当天电视 | 答应约会 |
|---|---|---|---|---|---|
| 1 | 周末 | 吃饭 | 暖和 | 不好看 | 否 |
| 2 | 周末 | 逛街 | 暖和 | 好看 | 是 |
| 3 | 周末 | 逛街 | 暖和 | 不好看 | 是 |
| 4 | 周末 | 逛街 | 炎热 | 好看 | 否 |
| 5 | 周末 | 逛街 | 炎热 | 不好看 | ? |
借鉴相似的样本,据此做预测
给定模型$f$、数据集$D = \{ (\xv_i, y_i) \}_{i \in [m]}$
均方误差 (mean squared error, MSE)
$$ \begin{align*} E(f;D) = \frac{1}{m} \sum_{i \in [m]} (f(\xv_i) - y_i)^2 \end{align*} $$
>>> from sklearn.metrics import mean_squared_error >>> y_true = [3, -0.5, 2, 7] >>> y_pred = [2.5, 0.0, 2, 8] >>> mean_squared_error(y_true, y_pred) # MSE 0.375 >>> mean_squared_error(y_true, y_pred, squared=False) # RMSE 0.6123724356957945
给定模型$f$、数据集$D = \{ (\xv_i, y_i) \}_{i \in [m]}$
错误率 (error rate)、精度 (accuracy)
$$ \begin{align*} E(f;D) = \frac{1}{m} \sum_{i \in [m]} \Ibb (f(\xv_i) \ne y_i), ~ \acc(f;D) = 1 - E(f;D) \end{align*} $$
>>> from sklearn.metrics import accuracy_score >>> y_true = [0, 1, 2, 3] >>> y_pred = [0, 2, 1, 3] >>> accuracy_score(y_true, y_pred) # 百分比 0.5 >>> accuracy_score(y_true, y_pred, normalize=False) # 正确分类的个数 2
二分类结果的混淆矩阵 (confusion matrix)
| 预测 正例 | 实际 负例 | |
|---|---|---|
| 真实 正例 | $\TP$ (真正例) | $\FN$ (假反例) |
| 真实 负例 | $\FP$ (假正例) | $\TN$ (真反例) |
查准率 (precision):预测的约会中有多少比例真的约会了
查全率 (recall):所有的约会中有多少比例被预测出来了
$$ \begin{align*} & \mathrm{precision} = \frac{\TP}{\TP + \FP}, \quad \mathrm{recall} = \frac{\TP}{\TP + \FN} \\[4pt] & \mathrm{F1} = \frac{2 \times \mathrm{Precision} \times \mathrm{Recall}}{\mathrm{Precision} + \mathrm{Recall}} = \frac{2 \times \TP}{\text{样本总数} + \TP - \TN \quad} \end{align*} $$
>>> from sklearn.metrics import confusion_matrix >>> from sklearn.metrics import precision_score, recall_score, f1_score >>> y_true = [1, 1, 0, 0, 1, 0, 1, 0] >>> y_pred = [0, 1, 0, 1, 1, 1, 1, 0] >>> cm = confusion_matrix(y_true, y_pred, labels=[1,0]) >>> cm array([[3, 1], [2, 2]]) >>> tp, fn, fp, tn = cm.ravel() >>> tp, fn, fp, tn (3, 1, 2, 2) >>> precision_score(y_true, y_pred) 0.6 >>> recall_score(y_true, y_pred) 0.75 >>> f1_score(y_true, y_pred) 0.6666666666666665
选择宗旨:在未知数据上表现好,即泛化 (generalization) 好
给定模型$f$、训练数据集$D = \{ (\xv_i, y_i) \}_{i \in [m]}$,其中$\xv_i \sim \Dcal$
训练 (training) 均方误差、经验 (empirical) 均方误差
$$ \begin{align*} E(f;D) = \frac{1}{m} \sum_{i \in [m]} (f(\xv_i) - y_i)^2 \end{align*} $$
泛化均方误差
$$ \begin{align*} E(f;\Dcal) = \Ebb_{\xv \sim \Dcal} [(f(\xv) - y)^2] = \Ebb_{D \sim \Dcal^m} [E(f;D)] \end{align*} $$
选择宗旨:在未知数据上表现好,即泛化 (generalization) 好
给定模型$f$、训练数据集$D = \{ (\xv_i, y_i) \}_{i \in [m]}$,其中$\xv_i \sim \Dcal$
训练 (training) 错误率、经验 (empirical) 错误率
$$ \begin{align*} E(f;D) = \frac{1}{m} \sum_{i \in [m]} \Ibb (f(\xv_i) \ne y_i) \end{align*} $$
泛化错误率
$$ \begin{align*} E(f;\Dcal) = \Ebb_{\xv \sim \Dcal} [\Ibb(f(\xv) \ne y)] = \Ebb_{D \sim \Dcal^m} [E(f;D)] \end{align*} $$
训练集:余弦函数中随机采样的$30$个点加上$0.1$的随机噪声
学习算法:$n$阶多项式回归,$n=1$即为线性回归
$$ \begin{align*} \min_{w_j} ~ g (w_j) = \frac{1}{2} \sum_{i \in [30]} \left( \sum_{j=0}^n w_j x_i^j - y_i \right)^2 \end{align*} $$
其中$w_0, w_1, \ldots, w_n$为待求参数
目标函数$g$关于$w_j$的偏导数为
$$ \begin{align*} \frac{\partial g}{\partial w_j} = \sum_{i \in [30]} \left( \sum_{j=0}^n w_j x_i^j - y_i \right) x_i^j \end{align*} $$
左图:1 阶多项式欠拟合 (underfitting)
中图:4 阶多项式拟合地最好
右图:15 阶多项式过拟合 (overfitting)
事先选定合适的模型 (归纳偏倚) 很重要!
从训练集中随机选择一部分样本作为验证集 (validation set)
据此比较多个候选模型的性能
交叉验证 (cross validation):将训练集平均分为$n$份,每轮
迭代$n$轮取平均,据此比较多个候选模型的性能
对任意样本$\xv$,设
对回归任务,样本数相同的不同数据集$D \sim \Dcal^m$,学习算法的
下面考虑对期望泛化误差$\Ebb_D [(f(\xv; D) - y_D)^2]$进行分解
$$ \begin{align*} & \qquad \Ebb_D [(f(\xv; D) - y_D)^2] \\ & = \Ebb_D [(f(\xv; D) \class{yellow}{- \bar{f}(\xv) + \bar{f}(\xv)} - y_D)^2] \\ & = \underbrace{\Ebb_D [(f(\xv; D) - \bar{f}(\xv))^2]}_{\var(\xv)} + \Ebb_D [(\bar{f}(\xv) - y_D)^2] \\ & \qquad \qquad + 2 \Ebb_D [(f(\xv; D) - \bar{f}(\xv))(\bar{f}(\xv) - y_D)] \\ & = \var(\xv) + \Ebb_D [(\bar{f}(\xv) - y_D)^2] + 2 (\bar{f}(\xv) - y_D) \underbrace{\Ebb_D [(f(\xv; D) - \bar{f}(\xv))]}_{0} \\ & = \var(\xv) + \Ebb_D [(\bar{f}(\xv) \class{yellow}{- y + y} - y_D)^2] \\ & = \var(\xv) + \Ebb_D [(\bar{f}(\xv) - y)^2] + \underbrace{\Ebb_D [(y - y_D)^2]}_{\varepsilon^2} + 2 \Ebb_D [(\bar{f}(\xv) - y)(y - y_D)] \\ & = \var(\xv) + \underbrace{(\bar{f}(\xv) - y)^2}_{\bias^2(\xv)} + \varepsilon^2 + 2 (\bar{f}(\xv) - y) \underbrace{\Ebb_D [y - y_D]}_{0} \\ & = \var(\xv) + \bias^2(\xv) + \varepsilon^2 \end{align*} $$